package br.com.jvet.mb;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.primefaces.event.CloseEvent;

import br.com.jvet.constante.Operacao;
import br.com.jvet.constante.TipoPessoa;
import br.com.jvet.constante.TipoTelefone;
import br.com.jvet.constante.UnidadeFederativa;
import br.com.jvet.entidade.Fornecedor;
import br.com.jvet.entidade.Telefone;
import br.com.jvet.infra.FornecedorFacade;
import br.com.jvet.util.CommomUtils;
import br.com.jvet.util.FacesUtil;

@ManagedBean(name = "fornecedorDetalheMB")
@SessionScoped
public class FornecedorDetalheMB implements Serializable {

	private FacesUtil FACES = new FacesUtil();
	private static final long serialVersionUID = 3913425320359551585L;
	private Fornecedor fornecedor;
	private Operacao operacao;
	private final String RETORNO_PAGINA = "/paginas/fornecedor/cadastroFornecedor.jsf?faces-redirect=true";
	private Telefone telefone;
	@EJB
	private FornecedorFacade fornecedorFacade;

	public FornecedorDetalheMB() {
		super();

	}

	public FornecedorDetalheMB(FornecedorFacade fornecedorFacade) {
		super();
		this.fornecedorFacade = fornecedorFacade;
	}

	public String salvar() {
		String retorno = "";
		try {
			switch (operacao) {
			case INCLUIR:
				fornecedorFacade.incluir(getFornecedor());
				break;

			case ALTERAR:
				incluirDataAtualizacao();
				fornecedorFacade.alterar(getFornecedor());
				break;

			default:
				break;
			}
			limpar();
			fornecedorFacade.listar();
			retorno = RETORNO_PAGINA;

		} catch (Exception e) {
			FACES.setErrorMessage(e);
		}

		return retorno;
	}

	public void limpar() {
		setFornecedor(null);

	}

	public void incluirDataAtualizacao() {
		fornecedor.getDadosCadastro().setDataAtualizacao(new Date());
	}

	public String sair() {
		limpar();
		return RETORNO_PAGINA;
	}

	public void close(CloseEvent event) {
		telefone = new Telefone();
		FACES.limparCampos(event.getComponent());
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public Operacao getOperacao() {
		return operacao;
	}

	public void setOperacao(Operacao operacao) {
		this.operacao = operacao;
	}

	public boolean isConsultando() {
		return getOperacao() == Operacao.CONSULTAR;
	}

	public boolean isIncluindo() {
		return getOperacao() == Operacao.INCLUIR;
	}

	public Telefone getTelefone() {
		return telefone;
	}

	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}

	public List<SelectItem> getListaTipoTel() {
		return CommomUtils.EnumToListSelectItem(TipoTelefone.class);
	}

	public void incluirTel(ActionEvent event) {

		if (!getFornecedor().getDadosCadastro().getTelefones()
				.contains(telefone)) {
			telefone.setDados(fornecedor.getDadosCadastro());
			getFornecedor().getDadosCadastro().getTelefones()
					.add(getTelefone());

		} else {
			telefone.setDados(getFornecedor().getDadosCadastro());

			int index = getFornecedor().getDadosCadastro().getTelefones()
					.indexOf(telefone);
			getFornecedor().getDadosCadastro().getTelefones()
					.set(index, getTelefone());
		}
		telefone = new Telefone();
	}

	public void excluirTel(Telefone tel) {
		getFornecedor().getDadosCadastro().getTelefones().remove(tel);
	}

	public List<SelectItem> getListaEstado() {
		return CommomUtils.EnumToListSelectItem(UnidadeFederativa.class);
	}

	public List<SelectItem> getListaTipoPessoa() {
		return CommomUtils.EnumToListSelectItem(TipoPessoa.class);
	}

}
